var crypto = require('../utils/crypto');
var express = require('express');
var db = require('../utils/db');
var http = require('../utils/http');
var room_service = require("./room_service");

var app = express();
var config = null;
var bodyParser = require('body-parser');
app.use(bodyParser.urlencoded({
    extended: true
  }));
  function send (res, ret) {
    var str = JSON.stringify(ret);
    res.send(str);
  }
//检测合法性
function check_account(req,res){
	var account = req.body.account;
	var sign = req.body.sign;
	if(account == null || sign == null){
		http.send(res,1,"unknown error");
		return false;
	}
	
	var serverSign = crypto.md5(account  + config.ACCOUNT_PRI_KEY);
	if(serverSign != sign){
		http.send(res,2,"login failed.");
		return false;
	}
	
	return true;
}

//设置跨域访问
app.all('*', function(req, res, next) {
	res.header("Access-Control-Allow-Origin", "*");
	res.header("Access-Control-Allow-Headers", "X-Requested-With");
	res.header("Access-Control-Allow-Methods","PUT,POST,GET,DELETE,OPTIONS");
	res.header("X-Powered-By",' 3.2.1');
	res.header("Content-Type", "application/json;charset=utf-8");
	next();
});

//选择服务器，将指定的服务器
app.post('/login', function (req, res, next) {
      
	if(!check_account(req,res)){
		return;
	}
   
	var ip = req.ip;
	if(ip.indexOf("::ffff:") != -1){
		ip = ip.substr(7);
	}
    
    //将目前可用的房间返回给玩家
    room_service.getRoomInfo(function(errcode,enterInfo){
        if(errcode){
         /*   var ret = {
                ip:enterInfo.ip,
                port:enterInfo.port,
                token:enterInfo.token,
                time:Date.now()
            };*/
       //     ret.sign = crypto.md5( ret.token + ret.time + config.ROOM_PRI_KEY);
            http.send(res,0,"ok",enterInfo);
        }
        else{
            http.send(res,errcode,"enter room failed.");
        }
    });
	
});

// app.get('/create_user',function(req,res){
// 	if(!check_account(req,res)){
// 		return;
// 	}
// 	var account = req.query.account;
// 	var name = req.query.name;
// 	var coins = 1000;
// 	var gems = 21;
// 	console.log(name);

// 	db.is_user_exist(account,function(ret){
// 		if(!ret){
// 			db.create_user(account,name,coins,gems,0,null,function(ret){
// 				if (ret == null) {
// 					http.send(res,2,"system error.");
// 				}
// 				else{
// 					http.send(res,0,"ok");					
// 				}
// 			});
// 		}
// 		else{
// 			http.send(res,1,"account have already exist.");
// 		}
// 	});
// });

// app.get('/create_private_room',function(req,res){
// 	//验证参数合法性
// 	var data = req.query;
// 	//验证玩家身份
// 	if(!check_account(req,res)){
// 		return;
// 	}

// 	var account = data.account;

// 	data.account = null;
// 	data.sign = null;
// 	var conf = data.conf;
// 	db.get_user_data(account,function(data){
// 		if(data == null){
// 			http.send(res,1,"system error");
// 			return;
// 		}
// 		var userId = data.userid;
// 		var name = data.name;
// 		//验证玩家状态
// 		db.get_room_id_of_user(userId,function(roomId){
// 			if(roomId != null){
// 				http.send(res,-1,"user is playing in room now.");
// 				return;
// 			}
// 			//创建房间
// 			room_service.createRoom(account,userId,conf,function(err,roomId){
// 				if(err == 0 && roomId != null){
// 					room_service.enterRoom(userId,name,roomId,function(errcode,enterInfo){
// 						if(enterInfo){
// 							var ret = {
// 								roomid:roomId,
// 								ip:enterInfo.ip,
// 								port:enterInfo.port,
// 								token:enterInfo.token,
// 								time:Date.now()
// 							};
// 							ret.sign = crypto.md5(ret.roomid + ret.token + ret.time + config.ROOM_PRI_KEY);
// 							http.send(res,0,"ok",ret);
// 						}
// 						else{
// 							http.send(res,errcode,"room doesn't exist.");
// 						}
// 					});
// 				}
// 				else{
// 					http.send(res,err,"create failed.");					
// 				}
// 			});
// 		});
// 	});
// });

// app.get('/enter_private_room',function(req,res){
// 	var data = req.query;
// 	var roomId = data.roomid;
// 	if(roomId == null){
// 		http.send(res,-1,"parameters don't match api requirements.");
// 		return;
// 	}
// 	if(!check_account(req,res)){
// 		return;
// 	}

// 	var account = data.account;

// 	db.get_user_data(account,function(data){
// 		if(data == null){
// 			http.send(res,-1,"system error");
// 			return;
// 		}
// 		var userId = data.userid;
// 		var name = data.name;

// 		//验证玩家状态
// 		//todo
// 		//进入房间
// 		room_service.enterRoom(userId,name,roomId,function(errcode,enterInfo){
// 			if(enterInfo){
// 				var ret = {
// 					roomid:roomId,
// 					ip:enterInfo.ip,
// 					port:enterInfo.port,
// 					token:enterInfo.token,
// 					time:Date.now()
// 				};
// 				ret.sign = crypto.md5(roomId + ret.token + ret.time + config.ROOM_PRI_KEY);
// 				http.send(res,0,"ok",ret);
// 			}
// 			else{
// 				http.send(res,errcode,"enter room failed.");
// 			}
// 		});
// 	});
// });

// app.get('/get_history_list',function(req,res){
// 	var data = req.query;
// 	if(!check_account(req,res)){
// 		return;
// 	}
// 	var account = data.account;
// 	db.get_user_data(account,function(data){
// 		if(data == null){
// 			http.send(res,-1,"system error");
// 			return;
// 		}
// 		var userId = data.userid;
// 		db.get_user_history(userId,function(history){
// 			http.send(res,0,"ok",{history:history});
// 		});
// 	});
// });

///GY 用来获取服务器的消息
app.get('/get_games_of_room',function(req,res){
	var data = req.query;
	var uuid = data.uuid;
	if(uuid == null){
		http.send(res,-1,"parameters don't match api requirements.");
		return;
	}
	if(!check_account(req,res)){
		return;
	}

    room_service.getRoomInfo(function(errcode,enterInfo){

     
        console.log("获取了房间的内容");
        send(res, {errcode: errcode, data: enterInfo});

    });
   
});

// app.get('/get_detail_of_game',function(req,res){
// 	var data = req.query;
// 	var uuid = data.uuid;
// 	var index = data.index;
// 	if(uuid == null || index == null){
// 		http.send(res,-1,"parameters don't match api requirements.");
// 		return;
// 	}
// 	if(!check_account(req,res)){
// 		return;
// 	}
// 	db.get_detail_of_game(uuid,index,function(data){
// 		http.send(res,0,"ok",{data:data});
// 	});
// });

// app.get('/get_user_status',function(req,res){
// 	if(!check_account(req,res)){
// 		return;
// 	}
// 	var account = req.query.account;
// 	db.get_gems(account,function(data){
// 		if(data != null){
// 			http.send(res,0,"ok",{gems:data.gems});	
// 		}
// 		else{
// 			http.send(res,1,"get gems failed.");
// 		}
// 	});
// });

// app.get('/get_message',function(req,res){
// 	if(!check_account(req,res)){
// 		return;
// 	}
// 	var type = req.query.type;
	
// 	if(type == null){
// 		http.send(res,-1,"parameters don't match api requirements.");
// 		return;
// 	}
	
// 	var version = req.query.version;
// 	db.get_message(type,version,function(data){
// 		if(data != null){
// 			http.send(res,0,"ok",{msg:data.msg,version:data.version});	
// 		}
// 		else{
// 			http.send(res,1,"get message failed.");
// 		}
// 	});
// });

// app.get('/is_server_online',function(req,res){
// 	if(!check_account(req,res)){
// 		return;
// 	}
// 	var ip = req.query.ip;
// 	var port = req.query.port;
// 	room_service.isServerOnline(ip,port,function(isonline){
// 		var ret = {
// 			isonline:isonline
// 		};
// 		http.send(res,0,"ok",ret);
// 	}); 
// });

exports.start = function($config){
	config = $config;
	app.listen(config.CLEINT_PORT);
	console.log("client service is listening on port " + config.CLEINT_PORT);
};